package com.wac.gateway.config;

import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

/**
 * @author wuancheng
 * @date 2024/7/1 11:56
 * @description 使用 Nacos 客户端来监听配置变更。可以通过 @NacosConfigListener 注解来实现配置的动态更新。
 */
@Component
public class NacosConfigListener {

    /**
     * 用途：当Spring Cloud配置中心中的配置发生变化，并且这些变化被应用到Spring的环境变量中时，会触发这个事件。此事件提供了一个机制，用于在配置变化时执行一些额外的逻辑。
     * 触发时机：当Nacos配置更新并应用到Spring环境中时触发。
     *
     * @param event
     */
    @EventListener
    public void onRefreshEvent(EnvironmentChangeEvent event) {
        System.out.println("Nacos config updated: " + event.getKeys());
        // 在这里处理配置更新后的逻辑
    }

    /**
     * 用途：当Spring应用上下文初始化或刷新完成时触发此事件。通常用于在应用程序启动时执行某些初始化逻辑。
     * 触发时机：当Spring应用上下文初始化或刷新时触发。通常在应用程序启动时或在显式调用context.refresh()时触发。
     *
     * @param event
     */
//    @EventListener
//    public void onContextRefreshedEvent(ContextRefreshedEvent event) {
//        System.out.println("ApplicationContext refreshed");
//        // 可以在这里处理应用上下文刷新后的逻辑
//    }

    /**
     * 用途：Spring Cloud的@RefreshScope用于标记需要在配置刷新时更新的bean。当带有@RefreshScope的bean被重新初始化时，会触发这个事件。
     * 触发时机：当带有@RefreshScope注解的bean因为配置变化被重新初始化时触发。
     *
     * @param event
     */
//    @EventListener
//    public void onRefreshScopeRefreshedEvent(RefreshScopeRefreshedEvent event) {
//        System.out.println("RefreshScope refreshed");
//        // 可以在这里处理RefreshScope刷新后的逻辑
//    }
}
